<?php

// 发送短信码
// GET sms.sendCode

namespace app\api\resource\sms;
use think\Db;
use think\Loader;
use think\Session;
use app\common\lib\Sms;

class SendCode
{
    // 方法
    public $_method = ['GET'];
    // 前置
    public $_pre    = [];
    // 描述
    public $_description = '发送短信码';
    // 参数
    public $_param  = [
        'scene'  => '场景,bindMobile:绑定手机|resetPwd:重置密码|resetMobile:重置手机号',
        'mobile' => '手机号',
    ];
    // 返回
    public $_return = [
        200 => '发送成功',
        422 => '请求参数不合法',
        500 => '服务器错误',
    ];

    public function run(&$request)
    {
        $scene = $request->get('scene/s','','trim');
        $params['mobile'] = $request->get('mobile/s','','trim');

        $validate = Loader::validate('Sms');
        if ( !$validate->scene('sendCode')->check($params) ) {
            $errMsg = $validate->getError();
            return [422,$errMsg];
        }

        // 场景处理
        $result = $this->_handle($scene,$params['mobile']);
        if (!$result['code']) return $result['data'];

        $code   = strval( rand(100000,999999) );
        $bool   = Sms::send('SMS_CODE',$params['mobile'],$code);
        if ($bool) {
            // 写入Session
            Session::set('sms',['scene'=>$scene,'mobile'=>$params['mobile'],'code'=>$code,'verify'=>false]);
            
            return [ 200,$result['data'] ];
        } else {
            return 500;
        }
    }

    // 场景处理
    private function _handle($scene, $mobile)
    {
        switch ($scene) {
            // 注册
            case 'register':
                $ret = Db::name('member')->where('mobile',$mobile)->field('id')->find();
                $result = is_null($ret) ? [ 'code'=>1,'data'=>[] ] : [ 'code'=>0,'data'=>[ 400,'手机号已被注册'] ];
                break;

            // 绑定手机
            case 'bindMobile':
                $ret = Db::name('member')->where('mobile',$mobile)->field('id')->find();
                $result = [ 'code'=>1,'data'=>is_null($ret) ? 'register' : 'bind' ];
                break;

            // 重置密码
            case 'resetPwd':
                $ret = Db::name('member')->where('mobile',$mobile)->field('id')->find();
                $result = is_null($ret) ? [ 'code'=>0,'data'=>[ 400,'手机号不存在'] ] : [ 'code'=>1,'data'=>[] ];
                $result = [ 'code'=>1,'data'=>[] ];
                break;

            // 重置手机号
            case 'resetMobile':
                $ret = Db::name('member')->where('mobile',$mobile)->field('id')->find();
                $result = !is_null($ret) ? [ 'code'=>0,'data'=>[ 400,'手机号已使用'] ] : [ 'code'=>1,'data'=>[] ];
                $result = [ 'code'=>1,'data'=>[] ];
                break;
            
            default:
                $result = [ 'code'=>1,'data'=>[] ];
                break;
        }
        return $result;
    }
}